package edu.fudan.jwxt.service.Impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import edu.fudan.jwxt.Exception.ServiceException;
import edu.fudan.jwxt.common.Constants;
import edu.fudan.jwxt.dao.TeacherCourseDao;
import edu.fudan.jwxt.entity.TeacherCourse;
import edu.fudan.jwxt.service.TeacherCourseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class TeacherCourseServiceImpl extends ServiceImpl<TeacherCourseDao, TeacherCourse>
        implements TeacherCourseService
    {
        @Autowired
        private TeacherCourseDao teacherCourseDao;

        // 不作检查
        @Override
        public List<TeacherCourse> selectByFirstString(String firstString, Object ObjectNumber){
            Map<String,Object> map = new HashMap<>();
            map.put(firstString,ObjectNumber);
            List<TeacherCourse> templist = teacherCourseDao.selectByMap(map);
            return templist;
        }

        // 不作检查
        @Override
        public Integer generateNewCourseAid(TeacherCourse teacherCourse){
            // 返回有相同courseId的所有课程
            List<TeacherCourse> templist=selectByFirstString("course_id",teacherCourse.getCourseId());
            Integer Maximum=0;
            // 如果不存在,应该可以默认创建一个1
            for (TeacherCourse teacherCourse1:templist) {
                if(Maximum<teacherCourse1.getCourseAid())
                    Maximum=teacherCourse1.getCourseAid();
            }
            return Maximum+1;
        }

        // 每次创建时,最好新建一个CourseAid即可。
        @Override
        public boolean save(TeacherCourse teacherCourse){
            teacherCourse.setCourseAid(generateNewCourseAid(teacherCourse));
            teacherCourseDao.insert(teacherCourse);
            return true;
        }

        @Override
        public void delete(TeacherCourse teacherCourse){
            if (selectByFirstString("class_id",teacherCourse.getClassId()).isEmpty())
                throw new ServiceException(Constants.CODE_600,"删除不存在课程");
            teacherCourseDao.deleteById(teacherCourse.getClassId());
        }

        @Override
        public void update(TeacherCourse teacherCourse){
            if (selectByFirstString("class_id",teacherCourse.getClassId()).isEmpty())
                throw new ServiceException(Constants.CODE_600,"修改不存在课程");
            teacherCourse.setCourseAid(generateNewCourseAid(teacherCourse));
            teacherCourseDao.updateById(teacherCourse);
        }

        @Override
        public List<TeacherCourse> selectByClassId(TeacherCourse teacherCourse){
            List<TeacherCourse> Ans=selectByFirstString("class_id",teacherCourse.getClassId());
            if(Ans.isEmpty())
                throw new ServiceException(Constants.CODE_600,"查询不存在平行班课程");
            return Ans;
        }

        // selectByCourseId
        @Override
        public List<TeacherCourse> selectByCourseId(String courseId){
            List<TeacherCourse> templist=selectByFirstString("course_id",courseId);
            if(templist.isEmpty())
                throw new ServiceException(Constants.CODE_600,"查询课程时出现不存在的大课Id");
            return templist;
        }

        // 联合查询,尚未作检验
        @Override
        public TeacherCourse selectByCourseIdClassId(String courseId, Integer classId){
            QueryWrapper<TeacherCourse> queryWrapper = new QueryWrapper<TeacherCourse>();
            queryWrapper.eq("course_id",courseId).eq("class_id",classId);
            List<TeacherCourse> teacherCourseList=baseMapper.selectList(queryWrapper);
            return teacherCourseList.get(0);
        }
    }
